import java.util.ArrayList;
import java.util.List;

public class Test2 {
    public static void merge(int[] nums1, int m, int[] nums2, int n) {
        //合并两个有序数组
        //https://leetcode.cn/problems/merge-sorted-array/
        //双指法
        int n1 = 0;
        int n2 = 0;
        int[] newnums = new int[m + n];
        int cur = -1;
//        while(n1 < m || n2 < n) {
//            if (nums1[n1] <= nums2[n2]) {
        //需要先判断n1和n2是否等于有效值，因为在n1等于有效值时，没判断，而是直接判断nums1和nums2的值的话会越界
//                cur = nums1[n1];
//                n1++;
//            }else if(nums1[n1] > nums2[n2]){
//                cur = nums2[n2];
//                n2++;
//            }else if (n1 == m) {
//                cur = nums2[n2];
//                n2++;
//            }else {
//                cur = nums1[n1];
//                n1++;
//            }
//            newnums[n1 + n2 -1] = cur;
//        }
        while(n1 < m || n2 < n) {
            if (n1 == m) {
                cur = nums2[n2];
                n2++;
            }else if (n2 == n){
                cur = nums1[n1];
                n1++;
            }else if (nums1[n1] <= nums2[n2]) {
                cur = nums1[n1];
                n1++;
            }else {
                cur = nums2[n2];
                n2++;
            }
            newnums[n1 + n2 -1] = cur;
        }
        for (int i = 0; i < m + n; i++) {
            nums1[i] = newnums[i];
        }

    }

    public static void main(String[] args) {
        int[] nums1 = {1,2,3};
        int[] nums2 = {2,3,4};
        merge(nums1,3,nums2,3);
    }
    public static int removeDuplicates(int[] nums) {
        //删除有序数组中的重复项
        //题的链接：https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
        //双指针法
        if (nums.length == 0) {
            return 0;
        }
        int fast = 1;
        int slow = 1;
        while(fast < nums.length) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }
    public static void main4(String[] args) {
        CardDemo cardDemo = new CardDemo();
        //买牌：
        List<Card> cards = cardDemo.buyCard();
        System.out.println(cards);
        //洗牌：
        cardDemo.shuffle(cards);
        System.out.println(cards);
        //发牌：
        List<List<Card>> ret = cardDemo.play(cards);
        for (int i = 0; i < 3; i++) {
            System.out.println("第" + i +"个人的牌" + ret.get(i));
        }
    }
    //练习2
    public static List<List<Integer>> generate(int numRows) {
        List<List<Integer>> list = new ArrayList<>();

        //先把第一行填入
        List<Integer> list0 = new ArrayList<>();
        list0.add(1);
        list.add(list0);

        //除了第一行的代码：
        for (int i = 1; i < numRows; i++) {//我们i不能从0开始，0行已经写完了，写下一行
            List<Integer> curList = new ArrayList<>();
            //处理每行的第一个元素
            curList.add(1);

            //处理中间元素
            List<Integer> preList = list.get(i - 1);//取list的上一行的一维数组元素
            for (int j = 1; j < i; j++) {
                //这里不能等于i，因为我们在下面处理最后一个元素
                int val1 = preList.get(j);
                int val2 = preList.get(j - 1);
                curList.add(val1 + val2);
            }

            //处理尾部的数据
            curList.add(1);
            //把处理过的顺序表放入list这个二维顺序表
            list.add(curList);
        }
        return list;
    }
    public static void main3(String[] args) {
        //对与List<List<Integer>>这个返回值为是二维数组
        List<List<Integer>> list = new ArrayList<>();
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list.add(list1);

        List<Integer> list2 = new ArrayList<>();
        list2.add(3);
        list2.add(4);
        list.add(list2);

        System.out.println(list);
    }

    public static void main1(String[] args) {
        //练习1
        String str1 = ("welcome to world");
        String str2 = ("come");
        ArrayList<Character> arrayList = new ArrayList<>();
        for (int i = 0; i < str1.length(); i++) {

            char ch = str1.charAt(i);
            if (!str2.contains(ch+"")) {//这里没有的话就放入顺序表中
                //这里的contains参数是CharSequence这个类型，我们ch为char，所以要将其变成字符串
                arrayList.add(ch);
            }
        }
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i) + "");
        }
        System.out.println("");
    }
}
